def main():
  print('this is main')

if __name__ == '__main__':
  main()
'''
在 Python 中，if __name__ == '__main__' 并不是强制必须写的，它的作用是区分模块的两种运行方式（作为脚本直接运行 vs 被其他模块导入），是一种代码组织的规范而非语法要求。
具体来说：
当一个 Python 文件被直接运行时（例如 python script.py），内置变量 __name__ 会被自动设为 '__main__'，此时 if 条件成立，缩进内的代码会执行。
当该文件被其他模块导入时（例如 import script），__name__ 会被设为模块名（即 'script'），此时 if 条件不成立，缩进内的代码不会执行。
如果你的代码只需要作为脚本直接运行，且不需要被其他模块导入复用，那么不写这段代码也完全可以运行。
但如果你的代码可能被导入（例如作为工具模块供其他程序使用），建议加上这段代码，这样可以避免导入时执行一些不必要的逻辑（如主程序流程、测试代码等），让模块的复用更灵活。
总结：它是一种 “最佳实践” 而非强制语法，是否需要写取决于代码的使用场景。
'''

'''
以下是几个使用 if __name__ == '__main__' 的典型代码示例，展示其在不同场景下的作用：
示例 1：基础用法（区分运行与导入）
'''
# 文件名：demo.py
def add(a, b):
    return a + b

# 当直接运行该文件时执行以下代码
if __name__ == '__main__':
    # 测试函数功能
    result = add(2, 3)
    print(f"直接运行时：2 + 3 = {result}")
'''
直接运行：执行 python demo.py，输出 直接运行时：2 + 3 = 5（if 内代码生效）。
被导入时：在其他文件中 import demo，if 内的代码不会执行，仅导入 add 函数供使用。

示例 2：作为脚本的主程序入口
'''
# 文件名：calculator.py

def multiply(x, y):
    return x * y

def divide(x, y):
    if y == 0:
        raise ValueError("除数不能为0")
    return x / y

if __name__ == '__main__':
    # 主程序逻辑：接收用户输入并计算
    num1 = float(input("请输入第一个数字："))
    num2 = float(input("请输入第二个数字："))
    
    product = multiply(num1, num2)
    print(f"乘积：{product}")
    
    try:
        quotient = divide(num1, num2)
        print(f"商：{quotient}")
    except ValueError as e:
        print(f"错误：{e}")
'''
直接运行时，会执行用户交互逻辑；
被导入时（如 from calculator import multiply），仅提供函数，不执行输入输出逻辑。

示例 3：模块自测代码
'''
# 文件名：string_utils.py

def is_palindrome(s):
    """判断字符串是否为回文（忽略大小写和非字母字符）"""
    cleaned = [c.lower() for c in s if c.isalpha()]
    return cleaned == cleaned[::-1]

if __name__ == '__main__':
    # 自测代码：验证函数正确性
    test_cases = [
        "A man a plan a canal Panama",  # 回文
        "Hello World",                  # 非回文
        "Racecar"                       # 回文
    ]
    
    for case in test_cases:
        result = "是" if is_palindrome(case) else "不是"
        print(f"'{case}' {result}回文")
'''
直接运行模块时，自动执行自测用例，验证函数功能；
被其他模块导入时，自测代码不执行，仅提供 is_palindrome 函数。

示例 4：命令行参数处理
'''
# 文件名：file_processor.py

import sys

def process_file(filename):
    """读取文件并输出行数"""
    try:
        with open(filename, 'r') as f:
            lines = f.readlines()
        print(f"文件 '{filename}' 共有 {len(lines)} 行")
    except FileNotFoundError:
        print(f"错误：文件 '{filename}' 不存在")

if __name__ == '__main__':
    # 从命令行接收文件名参数
    if len(sys.argv) != 2:
        print("用法：python file_processor.py <文件名>")
        sys.exit(1)
    process_file(sys.argv[1])
'''
直接运行时：通过 python file_processor.py test.txt 传入文件名，执行文件处理；
被导入时：可在其他代码中调用 process_file("test.txt")，避免命令行参数逻辑干扰。
这些示例的核心思想一致：将 “可复用的工具代码”（函数、类等）与 “仅在直接运行时执行的逻辑”（测试、交互、主程序等）分离，使模块既可以独立运行，又能被灵活导入复用。
'''
